package puzzleletras;

import java.util.ArrayList;
import java.util.List;


import aima.search.framework.Successor;
import aima.search.framework.SuccessorFunction;

public class PuzzleLetrasSuccessorFunction implements SuccessorFunction{

	@SuppressWarnings("unchecked")
	@Override
	public List getSuccessors(Object state) {
		
		// Creamos la lista donde almacenar los estados sucesores
		List<Successor> successors = new ArrayList<Successor>();
		
		PuzzleLetrasEstado estadoActual = (PuzzleLetrasEstado) state;
		
		PuzzleLetrasEstado nuevoEstado = null;
		
		// Para cada casilla del tablero...
		for (int i=0; i < estadoActual.getLongitud(); i++){
			// ...si se puede rotar la casilla subiendo...
			if (estadoActual.esPosibleRotar(i, PuzzleLetrasEstado.SUBIR)){
				// ...se crea un estado nuevo (copia del actual)...
				nuevoEstado = new PuzzleLetrasEstado(estadoActual);
				// ...se realiza el movimiento...
				nuevoEstado.rotarCasilla(i, PuzzleLetrasEstado.SUBIR);
				// ...y se almacena en la lista de sucesores
				successors.add(new Successor("Rotar: " + i + ", ARRIBA", nuevoEstado));
			}
			// ...si se puede rotar la casilla bajando...
			if (estadoActual.esPosibleRotar(i, PuzzleLetrasEstado.BAJAR)){
				// ...se crea un estado nuevo (copia del actual)...
				nuevoEstado = new PuzzleLetrasEstado(estadoActual);
				// ...se realiza el movimiento...
				nuevoEstado.rotarCasilla(i, PuzzleLetrasEstado.BAJAR);
				// ...y se almacena en la lista de sucesores
				successors.add(new Successor("Rotar: " + i + ", ABAJO", nuevoEstado));			
			}
		}
		
		return successors;
	}

}
